package com.boot.aop.annotation;


import com.boot.aop.RepeatSubmitKeyRuleEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;


/**
 * @description:方法重复提交注解 方法执行完成后锁释放，可以再次访问；
 * 默认锁的时长为30s
 * 也可自定义时间间隔，默认单位(s)
 * @author: meikq
 * @date: 2024-02-18 16:43
 * @param: KeyRuleEnum key的规则
 **/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiRepeatSubmit {

    /**
     * 设置请求锁定时间 默认30s
     */
    long lockTime() default 30;

    /**
     * 等待时间(n秒内获取不到锁尝试一直获取锁)
     */
    long waitTime() default 5;

    /**
     * 时间类型，默认毫秒
     */
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;

    /**
     * 缓存key的规则
     */
    RepeatSubmitKeyRuleEnum keyRule() default RepeatSubmitKeyRuleEnum.TOKEN_PATH;

    /**
     * 提示语
     */
    String alertMsg() default "操作频繁请稍后再试！";

    /**
     * 指定的key
     * 格式：#参数名，多个用+号拼接 例：#id+#dto.id
     */
    String keys() default "";


}
